Lineup Lab

Authors
Published

December 9, 2025

Project Summary & Skills Used

Our Computing II final project combined sports analytics and operations research to build a two-part decision-support system.We developed an NBA lineup optimizer that evaluates real historical player statistics and builds the most effective lineup under salary-cap constraints. We also designed an organizational budget allocation model that uses mean-variance optimization techniques to find the lowest-risk allocation of funds while maintaining effectiveness.

Our system used real NBA data from Basketball Reference (2007–2015), stored in a custom CSV format, and processed through Java classes that contained salary scaling, star tiers, and performance metrics.

Skills Demonstrated:

The project connects directly to IE principles such as optimization modeling, resource allocation, risk minimization, and data-driven decision making. It mirrors how industrial engineers design systems to allocate limited resources efficiently.

Skills Used:

Java : Creating custom classes (Player, Department), constructors, inheritance.

Data Structures: Managing ArrayLists for players, filters, and allocations.

File I/O: Reading/writing CSV files with OpenCSV.

External Libraries:

Tablesaw for data manipulation

SMILE for statistical tools

Vaadin for building UIs

OR-Tools for optimization modeling

Project Development Process

Original Idea

Our original idea was to create a simple NBA stats dashboard. After brainstorming, our team realized we could stretch our skills by incorporating optimization models. This led to a two-system design: A Lineup optimizer, and a decision-making model for organizations.

Evolution of the Project

We first focused on loading and cleaning raw NBA stats, which turned out to be more complex than expected due to formatting differences across seasons. As we built the Player class, we started adding features like scaled salaries and star tiers, which improved lineup realism. The UI was initially plain, but we redesigned it using Vaadin styling, logos, filters, grids, and a better layout.

Roadblocks We Encountered

Some roadblocks we encountered on the way to completing the project were:

-CSV handling: Some rows broke the parser but we adjust some headers to where the system could read in the entire csv

-OR-Tools integration: The optimizer initially returned empty lineups; we found out constraints were too tight and adjusted the model.

-Vaadin routing issues: Our pages showed the “default tutorial page” until we fixed the Route and MainLayout.

-Team coordination: Merging branches caused conflicts, but eventually we got the hand of things on Github.

Final Result vs. Expectations

The project ended up better than we first imagined. We originally planned a basic team builder, but we narrowed down our mission and finished with: - A full optimization engine - A styled interactive web interface - Two different mathematical models - A polished final application

Key Features and Highlights

NBA Lineup Solver

We used integer programming to select a 5-player lineup maximizing performance score while staying under a salary cap.

Decision variable: whether a player is selected

Constraint: salary ≤ cap

Objective: maximize total performance

It demonstrates real-world resource allocation — the same logic used in supply chain, staffing, and budgeting problems.

Organization Optimizer

Our second model optimizes how an NBA organization distributes its fixed budget across Stadium Operations, Staff Allocation, and Team Performance. Each category must meet a minimum funding requirement, and all allocations together must stay within the total budget. The model uses a weighted objective function to represent the organization’s priorities, allowing scenarios where the team focuses more on fan experience, internal efficiency, or on-court results. OR-Tools’ GLOP linear solver computes the optimal allocation quickly, making this model a realistic demonstration of strategic resource planning in sports organizations.

Reflection

This project taught me a lot about how real programs come together. Before this, I mostly thought about coding as writing one file at a time, but building the lineup optimizer and the budget model showed me how data, classes, logic, and a UI all connect. I definitely got better at working with Java classes, reading CSV files, and using tools like Vaadin and OR-Tools.

I’m proud of the parts I contributed, especially the Lineup functionality and getting the data and filters working smoothly. Debugging the routing issues and fixing the solver errors were frustrating at first, but solving them made me a lot more confident in my ability to troubleshoot bigger problems. I also learned how to work better on a team. Using GitHub, splitting tasks, and merging everything together was a little difficult at first, but it felt good seeing all our pieces turn into one working system.

Overall, this project helped me grow as a coder and made me feel more comfortable with larger, multi-layered projects. I walked away more confident in my skills and what I can handle moving forward.